package com.wei.czz.framework.blog.service;

import com.wei.czz.framework.blog.entity.BlogStatsEntity;

import java.util.Date;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-03-01 10:04:45
 * className: BlogStatsService 博客统计操作请求服务接口
 * version: 1.0
 * description:
 */
public interface BlogStatsService {

    /**
     * 获取用户已发布博客的统计数据操作
     * @param userId    用户主键
     * @param type      统计类型[1-浏览数 2-点赞数 3-评论数]
     * @param valueType 数值类型[0-日 1-月 2-年]
     * @return 统计结果
     */
    Long getUserBlogStats(Long userId, Integer type, Integer valueType);

    /**
     * 获取所有博客统计列表操作
     * @param blogId 博客主键
     * @return 博客统计列表
     */
    List<BlogStatsEntity> getBlogStatsList(Long blogId);

    /**
     * 根据博客id，增加博客统计的浏览次数
     * @param blogId 博客id
     * @param num    浏览次数变化数值
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogViewNum(Long blogId, Integer num);

    /**
     * 根据博客id，增加博客统计的点赞数
     * @param blogId 博客id
     * @param num    点赞数变化数值
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogLikeNum(Long blogId, Integer num);

    /**
     * 根据博客id，减少博客统计的点赞数
     * @param blogId  博客id
     * @param num     点赞数变化数值
     * @param optTime 用户点赞博客的操作时间
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int decrementBlogLikeNum(Long blogId, Integer num, Date optTime);

    /**
     * 根据博客id，增加博客统计的收藏数
     * @param blogId 博客id
     * @param num    点赞数变化数值
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogCollectNum(Long blogId, Integer num);

    /**
     * 根据博客id，增加博客统计的收藏数
     * @param blogId 博客id
     * @param num    点赞数变化数值
     * @param optTime 用户收藏博客的操作时间
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int decrementBlogCollectNum(Long blogId, Integer num, Date optTime);

    /**
     * 根据博客id，增加博客统计的评论数
     * @param blogId 博客id
     * @param num    评论数变化数值
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int incrementBlogCommentNum(Long blogId, Integer num);

    /**
     * 重置系统博客日统计数据（数据值清零）
     */
    void resetBlogStatsOnDay();

    /**
     * 重置系统博客月统计数据（数据值清零）
     */
    void resetBlogStatsOnMonth();

    /**
     * 重置系统博客年统计数据（数据值清零）
     */
    void resetBlogStatsOnYear();

}

